import { getSetting, openSetting, chooseAddress,showModal,showToast } from "../../utils/asyncWx.js";
import regeneratorRuntime from '../../lib/runtime/runtime';
/**
 * 1. 获取通讯地址
 *    1.1 绑定点击事件
 *    1.2 要调用 小程序API chooseAddress
 *    1.3 如果用户点击的是 确定 可以获取到地址 authSetting  scope.address true
 *    1.4 用户一次也没有点击 scope undefine
 *    1.5 如果用户点击的是 取消 第二次就没反应了authSetting scope.address false
 *        此时你应该诱导用户 打开设置页面 去让用户手动的打开获取地址权限
 *    1.6 报数据保存在缓存里面
 * 
 * 2. 把地址渲染到页面上去
 *    2.1 把地址 保存在缓存中
 *    2.2 在页面加载完成后 onShow， 从缓存中取数据，
 *    2.3 把取到的数据设置到data中
 * 
 * 3. 把缓存中的购物车数据 渲染到页面上
 *    3.1 取缓存中的购物车数据
 *    3.2 把取到的数据设置到data中
 * 
 * 4. 全选
 *    4.1 遍历所有商品 都选中了，全选选中
 *    4.2 再把值设置到data里面
 *    4.3 计算 总价格  和 总数量
 *    4.4 总价格  和 总数量 设置到data里面
 * 
 * 5. 点击item是否选中
 *    5.1 判断点击的是哪一个商品
 *    5.2 修改这个商品的选中状态 
 *    5.3 把修改后的cart 重写设置会data里面 并且设置会缓存里面
 * 
 * 6. 全选 反选 
 *    6.1 获取到cart allChecked
 *    6.2 allChecked=!allChecked
 *    6.3 循环遍历 每一个商品 checked 取反
 *    6.4 修改后的cart allChecked 设置到data里
 * 
 * 7. + - 号
 *  7.1 获取到cart
 *  7.2 找打点击的是那个商品
 *  7.3 对商品数量做+ - 操作
 * 
 * 8. 点击结算
 *    8.1 判断有没有收货地址
 *    8.2 判断有没有选购商品
 *    8.3 跳转到支付页面
 */
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    // 是否全选中
    allChecked:false,
    // 选中商品总价
    totalPrice:0,
    // 选中商品总个数
    totalNum:0
  },

  /**
   * 点击获取通讯地址
   */
  async handleGetAddress() {
    try {
      let res = await getSetting();
      let scopeAddress = res.authSetting["scope.address"];
      if (scopeAddress == false) {
        await openSetting();
      }
      let address = await chooseAddress();
      address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo;
      // 保存在缓存里面
      wx.setStorageSync("address", address);
    } catch (error) {
      console.log(error)
    }
  },
  onShow(){
    let address = wx.getStorageSync("address");
    let cart = wx.getStorageSync("cart") || [];
    // 数组 every 只有一个是false 就返回false,必须全部是true才返回true
    // 数组如果是空数组  every 方法 返回值是true
    // let allChecked =cart.length? cart.every(v=>v.checked):false;
    // 默认全选
    // let allChecked=true;
    // let totalPrice=0;
    // let totalNum=0;

    // cart.forEach((v,i)=>{
    //   if(v.checked){
    //     // 选中
    //     totalNum+=v.num;
    //     totalPrice+=v.goods_price*v.num;
    //   }else{
    //     allChecked=false;
    //   }
    // });
    // allChecked=cart.length>0?allChecked:false;
    // this.setData({
    //   address,
    //   cart,
    //   allChecked,
    //   totalNum,
    //   totalPrice
    // });
    this.setData({
      address
    });

    this.setCart(cart);
  },
  // 点击是否选中每一个商品
  handleItemChecked(e){
    let goods_id = e.currentTarget.dataset.id;
    // 那数组
    let {cart} = this.data;
    let index = cart.findIndex(v=>v.goods_id===goods_id);
    cart[index].checked=!cart[index].checked;
    this.setCart(cart);

  },
  // 设置购物车
  setCart(cart){
    let allChecked=true;
    let totalPrice=0;
    let totalNum=0;

    cart.forEach((v,i)=>{
      if(v.checked){
        // 选中
        totalNum+=v.num;
        totalPrice+=v.goods_price*v.num;
      }else{
        allChecked=false;
      }
    });
    allChecked=cart.length>0?allChecked:false;
    this.setData({
      cart,
      allChecked,
      totalNum,
      totalPrice
    });
    wx.setStorageSync("cart", cart);
  },
  /**
   * 全选 反选 点击事件
   */
  handleAllChecked(){
    let {allChecked,cart} = this.data;
    allChecked=!allChecked;
    cart.forEach(v=>v.checked=allChecked);
    this.setCart(cart);
  },
  /**
   * 点击 + - 号
   */
  async handleEditNum(e){
    let {id,opration }=e.currentTarget.dataset;
    let {cart} = this.data;
    let index = cart.findIndex(v=>v.goods_id===id);
    if(opration===-1 && cart[index].num===1){
      let res = await showModal({content:'你确定要删除吗？'})
      if(res.confirm){
           cart.splice(index,1);  
           this.setCart(cart);      
      }
    }else{
      cart[index].num+=opration;
      this.setCart(cart); 
    }
  },
  /**
   * 点击结算
   */
  async handleOrderPay(){
    let {address,totalNum} = this.data;
    if(!address){
      await showToast({title:'您还没有选择收货地址！！！'});
      return;
    }
    if(totalNum===0){
      await showToast({title:'您还没有选购商品！！！'});
      return;
    }
    // 跳转到 支付页面
    wx.navigateTo({
      url: '/pages/pay/index'
    });

  }



})